﻿using System;
using System.Collections.Generic;
using Infraestrutura.Repositorios.SQL;
using System.Configuration;
using System.Data.SqlClient;

namespace Model.Produtos
{
    public class GrupoProdutoService: RepositorioSQL<GrupoProduto>, IGrupoProdutoService
    {

        public GrupoProdutoService()
        {
            Tabela = "GruposProdutos";
            LigacaoBD = ConfigurationManager.ConnectionStrings["ApplicationServices"].ConnectionString;
        }

        public GrupoProduto ObterPorCodGrupoProduto(String codGrupoProduto)
        {
            return ObterPorChave(String.Format("@CodGrupoProduto='{0}'", codGrupoProduto));
        }

        public IList<GrupoProduto> ObterGruposFilhoPorCodGrupoProduto(String codGrupo)
        {
            return ObterLista(String.Format("exec proc_GruposProdutosFilhoLoadByCodGrupoProduto @CodGrupoProduto='{0}'", codGrupo));
        }

        protected override GrupoProduto CarregarDados(System.Data.SqlClient.SqlDataReader dataReader, GrupoProduto item)
        {
            item.CodGrupoProduto = dataReader["CodGrupoProduto"].ToString();
            item.Nome = dataReader["Nome"].ToString();
            item.Descricao = dataReader["Descricao"].ToString();
            if (!Convert.IsDBNull(dataReader["CodGrupoProdutoPai"]))
            {
                item.GrupoPai = new GrupoProduto();
                item.GrupoPai.CodGrupoProduto = dataReader["CodGrupoProdutoPai"].ToString();
                item.GrupoPai.Nome = dataReader["NomePai"].ToString();
                item.GrupoPai.Descricao = dataReader["DescricaoPai"].ToString();
                item.GrupoPai.GrupoPai = new GrupoProduto() { CodGrupoProduto = dataReader["CodGrupoProdutoPaiPai"].ToString() };
            }
            //TODO: Falta carregar dados dos grupos filhos
            return item;
        }

        protected override string ObterParametrosInserir(GrupoProduto item)
        {
            
            if (item.GrupoPai != null)
                return String.Format("@CodGrupoProduto='{0}', @Nome='{1}', @Descricao='{2}', @CodGrupoProdutoPai='{3}'",
                                   item.CodGrupoProduto, item.Nome, item.Descricao, item.GrupoPai.CodGrupoProduto);
            else
                return String.Format("@CodGrupoProduto='{0}', @Nome='{1}', @Descricao='{2}'",
                                   item.CodGrupoProduto, item.Nome, item.Descricao);
        }

        protected override string ObterParametrosApagar(GrupoProduto item)
        {
            return String.Format("@CodGrupoProduto='{0}'",
                                  item.CodGrupoProduto);
        }
       
    }
}
